Programmable circuit elements, also known as field programmable gate arrays (FPGA) are integrated circuits of digital technology, into which logical circuits can be programmed. FPGAs therefore differ from computer processors (CPU) and programmable logic controllers (PLC) in which the functional structure must be specified before fabrication, and only the temporal flow has to be programmed, in that in the case of an FPGA, even the functional structure is still to be programmed after production, or can even be changed again. This is even possible on-site at the time of installation and during use.
During the programming of an FPGA, functional structures, and thereby different integrated components, i.e. the desired circuit of the FPGA, are specified. This circuit can be created graphically in the form of a circuit diagram or by means of a hardware description language, also known as HDL. A bitstream of the integrated components, e.g. of lookup tables or flip-flops and associated connecting structures is then generated with a synthesis tool, taking particular account of the hardware resources of the target FPGA. At run time, i.e. when the operating voltage at the FPGA is switched on, this bitstream is then loaded from an additionally necessary, non-volatile memory into the volatile FPGA. With this, the components are implemented in the FPGA as specified in the circuit diagram. The FPGA retains this circuit structure until the operating voltage is switched off, or until a different bitstream is loaded.
In the circuit diagram, also referred to below simply as the circuit, data such as constants can also be hard-coded. These can be used internally by the FPGA, or may also be output. Cryptographic keys can also be placed in the FPGA in this way. Hard-coded data within a circuit can very easily be changed, for example using the HDL hardware description language. A new bitstream, however, must be created with the synthesis tool from every circuit, and this typically takes many minutes.
The bitstream contains the configuration data, i.e. the circuit, in a proprietary, unknown format, which is often manufacturer-specific or also FPGA-specific. If it is desired to operate devices using FPGAs with individual data bitstreams which contain, for example, individual device serial numbers and/or individual cryptographic device keys, a unique bitstream must be generated afresh for each device with the aid of the synthesis tool. Even with a small number of devices, this entails a high requirement for computation and time to generate the different bitstream files, and can, in particular, hardly be carried out when the devices are produced at a high frequency.
FPGAs are known from the Internet publication by Dirk Koch and Christian Beckhoff: Hierarchical Reconfiguration of FPGAs, FPL 2004, https://www.fp12014.tum.de/fileadmin/w00bpo/www/gallery/W2a 01 FPL2014 Hierarchical Reconfiguration of FPGAs Koch-Beckhoff.pdf, which support decomposition of the FPGA programming into individual modules which are generated separately and stored as partial bitstreams, and which can be loaded independently of one another and exchanged at run time. Cryptographic keys can also be made available as modules. However, this dynamic loading of modules has so far only been supported by a small number of newer FPGAs. In addition, the part that is to be exchanged must already be identified when the circuit diagram is designed, placed into its own module, and provided with an interface. In addition, a cryptographic key introduced in this way is present in a separate file on the device, and can therefore be easily identified and read out.